﻿Примеры программ
admin|2009/01/18 18:26:14
##PAGE##
В этом разделе приведены три небольшие программы и примеры их использования. Интерактивная система позволяет загрузить их в интерпретатор FP и отследить процесс выполнения на задаваемых пользователем аргументах. Синтаксис FP, использованный в интерпретаторе слегка отличается от классического, в основном из-за отсутствия в таблицах ASCII некоторых символов. В [[InterpreterRefrence|приложении]] приводится таблица соответствия и описание команд интерпретатора. 

===Последний элемент списка===
<fpcode>Def last = null o tl -> 1s; last o tl</fpcode>

Шаги вычисления:

<math> 
last~:~\langle A,B\rangle  =(null\circ tl\rightarrow1;\ last\circ tl)~:~\langle A, B\rangle \\
                           =last\circ tl:\langle A, B\rangle \text{ see } null\circ tl:\langle A,B\rangle = F \\
                           =last:(tl:\langle A, B\rangle)=last:tl\langle B\rangle \\
                           =(null\circ tl\rightarrow 1;last\circ tl:\langle B\rangle \\
                           =1:\langle B\rangle \text{ see }  null \circ tl:\langle B\rangle = T \\
                           = B;
</math>


===Программа конкатенации двух строк===

<fpcode>
Def concat = /apndl o apndr</fpcode>

При пошаговом исполнении процесс вычисления будет выглядеть так:

<math>
  /\subset\circ\supset~:~\langle\langle A,B\rangle,\langle C,D\rangle\rangle
=/\subset~:~(\supset~:~\langle\langle A,B\rangle,\langle C,D\rangle\rangle)\\
=/\subset~:~\langle A,B,\langle C,D\rangle\rangle\\
= \subset~:~\langle A, /\subset:\langle B, \langle C,D\rangle\rangle\rangle\\
= \subset~:~\langle A, \subset:\langle B, \langle C,D\rangle\rangle\rangle\\
= \subset~:~\langle A, \langle B,  C,D\rangle\rangle\\
= \langle A,B,C,D \rangle
</math>

===Скалярное произведение===
<fpcode>
Def IP = /+ o @* o transpose
</fpcode>

Вычисление будет проиходить по следующим шагам:

<math>
IP~:~\langle\langle 1,2,3\rangle,\langle 6,5,4\rangle\rangle \\
=(/+)\circ(\alpha\times)\circ trans:\langle\langle 1,2,3\rangle,\langle 6,5,4\rangle\rangle \\
=(/+):((\alpha\times):(trans:\langle\langle 1,2,3\rangle,\langle 6,5,4\rangle\rangle)) \\
=(/+):((\alpha\times):(\langle\langle 1,6\rangle,\langle 2,5\rangle,\langle 3,4 \rangle\rangle))\\
=(/+):(\langle\times:\langle 1,6\rangle,\times:\langle 2,5\rangle,\times:\langle 3,4 \rangle\rangle))\\
=(/+):\langle 6, 10, 12\rangle\\
=+:\langle 6, +:\langle 10, 12\rangle\rangle\\
=+:\langle 6, 22\rangle\\
= 28

</math>
